/**
 * 定时任务配置信息
 */
layui.define(['index', 'flying'], function (exports) {  //先加载index模块，里面配置了全局的入口
  const admin = layui.admin,
      flying = layui.flying
      ,form = layui.form
      ,table = layui.table
      ,layer = layui.layer
      ,dropdown = layui.dropdown;

  flying.table({
    elem: '#LAY-data-table',
    url: '/task/jobInfo/page', //数据接口
    cols: [
      {type: 'numbers', fixed: 'left', title: '序号'}
      , {field: 'serviceName', title: '所属服务', minWidth: 100}
      , {field: 'jobName', title: '任务名称', minWidth: 100}
      , {field: 'jobType', title: '任务类型 DEFAULT定时任务 BATCH批量任务', minWidth: 100}
      , {field: 'jobGroup', title: '任务分组', minWidth: 100}
      , {field: 'jobTarget', title: '任务执行目标', minWidth: 100}
      , {field: 'jobCron', title: 'cron表达式', minWidth: 100}
      , {field: 'jobDesc', title: '任务描述', minWidth: 100}
      , {field: 'jobParam', title: '任务参数', minWidth: 100}
      , {field: 'jobStatus', title: '任务状态', minWidth: 100}
      , {field: 'strategy', title: '执行策略（轮询）', minWidth: 100}
      , {field: 'status', title: '状态', minWidth: 100}
      , {field: 'mobile', title: '告警手机号', minWidth: 100}
      , {field: 'email', title: '告警邮件', minWidth: 100}
      , {field: 'remark', title: '备注说明', minWidth: 100}
      , {field: 'tenantId', title: '租户ID', minWidth: 100}
      , {field: 'status', title: '使用状态', width: 90, templet: '#statusSwitchTpl', unresize: true}
      , {field: 'updatedBy', title: '修改人', minWidth: 90}
      , {field: 'updatedTime', title: '修改时间', templet: '<div>{{ layui.util.toDateString(d.updatedTime, "yyyy-MM-dd HH:mm:ss") }}</div>', minWidth: 170, sort: true}
      , {title: '操作', width: 160, align: 'center', fixed: 'right', toolbar: '#op-table'}
    ]
  });

  const jobInfo = {
    // 编辑
    handleEdit: function (title, id) {
      layer.open({
        type: 2
        , title: title
        , content: '/task/jobInfo/turn/edit?id=' + id
        , area: ['100%', '100%']
        , resize: false
        , btn: ['确认', '取消']
        , btnAlign: 'r'
        , maxmin: true
        , yes: function (index, layero) {
          let iframeWindow = window['layui-layer-iframe' + index]
              , submitID = 'LAY-data-form-front-submit'
              , submit = layero.find('iframe').contents().find('#' + submitID);

          //监听提交
          iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) {
            let field = data.field; //获取提交的字段

            //提交 Ajax 成功后，静态更新表格中的数据
            admin.req({
              url: '/task/jobInfo/save',
              type: 'post',
              contentType: 'application/json;charset=utf-8',
              data: JSON.stringify(field),
              success: function (res) {
                //执行成功
                layer.msg(res.msg, {icon: 1});
                table.reload('LAY-data-table'); //数据刷新
                layer.close(index); //关闭弹层
              }
            });
          });

          submit.trigger('click');
        }
      });
    },
    // 删除
    handleDelete: function (id) {
      layer.confirm('真的删除行么？', function (index) {
        //提交 Ajax 成功后，更新表格中的数据
        admin.req({
          url: '/task/jobInfo/deleteById/' + id
          , type: 'get'
          , done: function (res) {
            //执行成功
            layer.msg(res.msg, {icon: 1});
            table.reload('LAY-data-table'); //数据刷新
            layer.close(index); //关闭弹层
          }
        });
      });
    },
    // 保存
    handleSave: function (obj, callback) {
      //提交 Ajax 成功后，静态更新表格中的数据
      admin.req({
        url: '/task/jobInfo/save',
        type: 'post',
        contentType: 'application/json;charset=utf-8',
        data: JSON.stringify(obj),
        success: function (res) {
          //执行成功
          layer.msg(res.msg, {icon: 1});
          table.reload('LAY-data-table'); //数据刷新
          // 执行传入的回调函数，并将结果传递给它
          if (typeof callback === 'function') {
            callback();
          }
          // layer.close(index); //关闭弹层
        }
      });
    },
    // 暂停任务
    handlePause: function (obj, callback) {
      //提交 Ajax 成功后，静态更新表格中的数据
      admin.req({
        url: '/task/jobInfo/pause',
        type: 'post',
        data: {"jobName" : obj.jobName, "jobGroup": obj.jobGroup},
        success: function (res) {
          //执行成功
          layer.msg(res.msg, {icon: 1});
          table.reload('LAY-data-table'); //数据刷新
          // 执行传入的回调函数，并将结果传递给它
          if (typeof callback === 'function') {
            callback();
          }
          // layer.close(index); //关闭弹层
        }
      });
    },
    // 恢复任务
    handleResume: function (obj, callback) {
      //提交 Ajax 成功后，静态更新表格中的数据
      admin.req({
        url: '/task/jobInfo/resume',
        type: 'post',
        data: {"jobName" : obj.jobName, "jobGroup": obj.jobGroup},
        success: function (res) {
          //执行成功
          layer.msg(res.msg, {icon: 1});
          table.reload('LAY-data-table'); //数据刷新
          // 执行传入的回调函数，并将结果传递给它
          if (typeof callback === 'function') {
            callback();
          }
          // layer.close(index); //关闭弹层
        }
      });
    },
    // 中断正在运行任务
    handleStop: function (obj, callback) {
      //提交 Ajax 成功后，静态更新表格中的数据
      admin.req({
        url: '/task/jobInfo/stop',
        type: 'post',
        data: {"jobName" : obj.jobName, "jobGroup": obj.jobGroup},
        success: function (res) {
          //执行成功
          layer.msg(res.msg, {icon: 1});
          table.reload('LAY-data-table'); //数据刷新
          // 执行传入的回调函数，并将结果传递给它
          if (typeof callback === 'function') {
            callback();
          }
          // layer.close(index); //关闭弹层
        }
      });
    },
    // 立即触发执行一次任务
    handleTrigger: function (obj, callback) {
      //提交 Ajax 成功后，静态更新表格中的数据
      admin.req({
        url: '/task/jobInfo/trigger',
        type: 'post',
        data: {"jobName" : obj.jobName, "jobGroup": obj.jobGroup},
        success: function (res) {
          //执行成功
          layer.msg(res.msg, {icon: 1});
          table.reload('LAY-data-table'); //数据刷新
          // 执行传入的回调函数，并将结果传递给它
          if (typeof callback === 'function') {
            callback();
          }
          // layer.close(index); //关闭弹层
        }
      });
    },
  }

  //对外暴露的接口
  exports('jobInfo', jobInfo);
});